package main

import "fmt"

//学生结构体
type Student struct {
	Name  string
	Age   int
	Score int
}

//显示学生个人信息方法，接收指针类型
func (stu *Student) ShowInfo() {
	fmt.Printf("学生姓名：%v 年龄=%d 成绩=%d\n", stu.Name, stu.Age, stu.Score)
}

//设置学生成绩
func (stu *Student) SetScore(score int) {
	stu.Score = score
}

//小学生群体 单词pupil
type Pupil struct {
	//小学生的属性完全可以继承Student学生的属性
	Student //继承匿名字段
}

//小学生独有方法
func (p *Pupil) testing() {
	fmt.Println("小学生正在期末考试中..")
}

//大学生结构体，同样的也有学生的常见属性
type Graduate struct {
	Student
}

//大学生独有的方法
func (g *Graduate) testing() {
	fmt.Println("大学生正在研究生答辩考试中...")
}

func main() {
	p1 := &Pupil{Student{"汤米", 8, 99}}
	p1.testing()
	p1.ShowInfo()
	p1.SetScore(145)
	p1.ShowInfo()
	fmt.Println("-----------")
	g1 := &Graduate{Student{"周二毛", 24, 50}}
	g1.testing()
	g1.ShowInfo()
	g1.SetScore(89)
	g1.ShowInfo()
}
